package easy

import (
	"regexp"
	"strings"
)

/*
时间复杂度:O(N)
空间复杂度:O(1)

标准库
*/

func countSegments(s string) int {
	rep := regexp.MustCompile("[ ]+")
	bs := rep.ReplaceAll([]byte(s), []byte(" "))
	ans := strings.Trim(string(bs), " ")
	if len(ans) == 0 {
		return 0
	}
	return len(strings.Split(ans, " "))
}

/*
时间复杂度:O(N)
空间复杂度:O(1)

单指针遍历
*/
func countSegments1(s string) int {
	i := 0
	n := len(s)
	ans := 0
	for i < n {
		for i < n && s[i] == ' ' {
			i++
		}
		if i < n {
			ans++
		}
		for i < n && s[i] != ' ' {
			i++
		}
	}
	return ans
}

/*
时间复杂度:O(N)
空间复杂度:O(1)

直接for循环,这里需要注意一点,什么时候才能判断出现的字符串个数+1 ??
遍历s, 如果当前字符串不为空格,则两种情况下可以+1:
	1.i==0
	2.i!=0 && s[i-1] == ' '
*/
func countSegments2(s string) int {
	ans := 0
	for i, ch := range s {
		if (i == 0 || s[i-1] == ' ') && ch != ' ' {
			ans++
		}
	}
	return ans
}